package com.game.Maze.Renderers;

import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;
import com.game.Maze.Objects.IRoom;
import com.game.Maze.Util.DimesionsFactory;
import com.game.Maze.Util.WorldSide;

/* TODO Сделать взаимосвязь с положением игрока - чем дальше стена от игрока, тем она прозрачнее */

/**
 * Объект, отображающий комнату
 * 
 */
public class RoomRenderer implements IRenderer
{
  // Размер комнаты для рендеринга
  private Vector2 m_StartPoint;
  private Texture m_RoomTexture;

  // Комната для рендеринга
  private IRoom m_Room;

  public RoomRenderer(IRoom room)
  {
    m_Room = room;
  }

  @Override
  public void render(SpriteBatch batch)
  {
    // Проверяем видима ли комната
    if (m_Room.isVisible())
    {
      batch.draw(m_RoomTexture, m_StartPoint.x, m_StartPoint.y);
    }
  }

  @Override
  public void create(int column, int row)
  {
    String wallSides = new String();
    
    // Составляем список стен у комнаты
    if (m_Room.hasWall(WorldSide.North) && m_Room.isWallVisible(WorldSide.North))
    {
      wallSides += "N";
    }

    if (m_Room.hasWall(WorldSide.East) && m_Room.isWallVisible(WorldSide.East))
    {
      wallSides += "E";
    }

    if (m_Room.hasWall(WorldSide.South) && m_Room.isWallVisible(WorldSide.South))
    {
      wallSides += "S";
    }

    if (m_Room.hasWall(WorldSide.West) && m_Room.isWallVisible(WorldSide.West))
    {
      wallSides += "W";
    }
    
    m_RoomTexture = RoomTextureFactory.instance().texture(wallSides);
    m_StartPoint = DimesionsFactory.instance().startPoint(column, row);
  }
}
